<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Hash;
use DB;
use App\Http\Requests;
use App\Http\Controllers\Controller;

class  CateController extends Controller
{	
	/**
	 * 获取表中的所有数据
	 */
	public static function getAllCate(){

		return DB::table('cates')->get();
	}

	/**
	 * 递归遍历数据
	 */
	public static function getCateArr($cates,$pid){
		$data = [];
		foreach ($cates as $k=>$v){
			if($v->pid == $pid){
				$v->sub=self::getCateArr($cates,$v->id);
				$data[] =$v;
			}
		}
		return $data;
	}




	/**
	 * 递归查询所有分类
	 */

	public function getCatesByPid($pid){

		$res = DB::table('cates')->where('pid',$pid)->get();
		$data = [];
		foreach ($res as $key => $value) {
			$value->sub = $this->getCatesByPid($value->id);
			$data[]=$value;
		}
		return $res;

	}

	/**
	 * 查询所有分类下的子分类 按照sql排序
	 *
	 * select *,concat(path,",",id) as paths form cates order by paths;
	 */
 	public static function getCates(){
 		$res = DB::table('cates')
 		->select(DB::raw('*,concat(path,",",id) as paths'))
 		->orderBy('paths')
 		->get();
 		foreach($res as $k=>$v){
 			$tmp = explode(',',$v->path);
 			$len = count($tmp)-1;
 			//修改分类的名称
 			$res[$k]->catename = str_repeat('|----',$len).$v->catename;
 		}
 		// dd($res);
 		return $res;
 	}



	/**
	 * 分类 添加页面
	 */

	public function getAdd(){

		//查询所有分类
		// $res = DB::table('cates')->get();
		$cate = self::getCates();

		//显示模板

		return view('cate.add',['cates'=>$cate]);
	}

	/**
	 * 分类数据的插入操作
	 */
	public function postInsert(Request $request){

		// dd($request->all());
		$data = $request->only(['catename','pid']);
		//拼接数据
		$pid = $request->input('pid');
		if($pid == 0){
			$data['path'] = 0;
		}else{
			$info = DB::table('cates')->where('id',$pid)->first();
			$data['path'] = $info->path.','.$info->id;
		}
		// dd($data);
		//执行插入操作
		$res = DB::table('cates')->insert($data);
		if($res){
    		//成功 重定向 页面跳转到列表页
    		return redirect('admin/cate/index')->with('success','数据添加成功');
    	}else{
    		//失败 回到添加页
    		return back()->with('error','数据添加失败');
    	}

	}
	public function getIndex(Request $request){


		//递归查询数据库 进行分类处理
		// $this->getCatesByPid(0);
		$all = $this->getAllCate();

		$res = $this ->getCateArr($all,0);

		// var_dump($res);

		// 查询数据
		// $cate = DB::table('cates')->get();
		$cates=DB::table('cates')
         ->where(function($query)use($request){
            $query->where('catename','like','%'.$request->input('keywords').'%');
        })
        ->paginate($request->input('num',10));
        
        //解析模板
        return view('cate.index',['cates'=>$cates,'request'=>$request->all()]);
		
		// $cates = self::getCates();
		// //显示模板
		// return view('cate.index',['cates'=>$cates]);

	}
	// public function getIndex(Request $request)
 //    {

 //       // dd('index');

 //    	// 读取数据 并且分页
 //    	 $cates=DB::table('cates')
 //         ->where(function($query)use($request){
 //            $query->where('catename','like','%'.$request->input('keywords').'%');
 //        })
 //        ->paginate($request->input('num',10));
        
 //        //解析模板
 //        return view('cate.index',['cates'=>$cates,'request'=>$request->all()]);  
 //    }

	/**
	 * 删除操作
	 */
	public function getDelete($id){
		//判断是否有子类
		$data=DB::table('cates')->where('pid',$id)->count();

		if($data > 0){
			return back()->with('error','该分类下有子类,不允许删除');
		}else{
			$res = DB::table('cates')->where('id',$id)->delete();
		}

		if($res){
    		//成功 重定向 页面跳转到列表页
    		return redirect('admin/cate/index')->with('success','数据删除成功');
    	}else{
    		//失败 回到添加页
    		return back()->with('error','数据删除失败');
    	}

	}

	/**
	 * 分类修改 表单
	 */
	public function getEdit($id){

		// dd($id);
		//查询所有分类
		$cates = self::getCates();
		//查询当前分类的信息
		$catesinfo = DB::table('cates')->where('id',$id)->first();
		//显示模板 分配变量
		return view('cate.edit',['catesinfo'=>$catesinfo,'cates'=>$cates]);
	}

	/**
	 * 数据修改
	 */
	public function postUpdate(Request $request){
		// dd($request->all());
		$id = $request->input('id');
		$pid = $request->input('pid');//form里的pid
		$data =$request->only(['catename','pid']);
		//根据id查询原数据
		$info = DB::table('cates')->where('id',$id)->first();

		//判断 原数据和表单中的pid是否一样,如果不一样,即修改了上级分类,那么如果有子类就不能修改,没有就可以修改
		if($info->pid !=$pid){
			//要修改分类就要查询 如果还有子分类 就不能修改
			//判断是否有子类
			$res=DB::table('cates')->where('pid',$id)->count();

			if($res > 0){
				// dd($res);

				return back()->with('error','该分类下有子类,不允许修改');
			}


		}

		//拼接路径
			if($pid == 0){
				$data['path'] = 0;
			}else{
				$info = DB::table('cates')->where('id',$pid)->first();
				$data['path'] = $info->path.','.$info->id;
			}

			// dd($data);
			//可以修改
			$res = DB::table('cates')->where('id',$id)->update($data);
			if($res){
    		//成功 重定向 页面跳转到列表页
	    		return redirect('admin/cate/index')->with('success','数据修改成功');
	    	}else{
	    		//失败 回到添加页
	    		return back()->with('error','数据修改失败');
	    	}

	}
}

